#ifndef __M_LOG_H__
#define __M_LOG_H__
#include <iostream>
#include <ctime> 

namespace mymq{ 

    // 封装一个日志宏，通过日志宏进行打印，带有时间、文件名、行号
    // 例如：[14:12:43][log.cc:23] 打开文件失败！

    #define DBG_LEVEL 0
    #define INF_LEVEL 1
    #define ERR_LEVEL 2
    #define DEFAULT_LEVEL DBG_LEVEL

    #define LOG(lev_str,level,format,...) {\
        if(level >= DEFAULT_LEVEL) {\
            time_t t = time(nullptr);\
            struct tm* ptm = localtime(&t);\
            char time_str[32];\
            strftime(time_str,31,"%H:%M:%S",ptm);\
            printf("[%s][%s][%s:%d] " format "\n", lev_str, time_str,__FILE__,__LINE__,##__VA_ARGS__);\
        }\
    }

    #define DLOG(format,...) LOG("DBG",DBG_LEVEL,format,##__VA_ARGS__)
    #define ILOG(format,...) LOG("INF",INF_LEVEL,format,##__VA_ARGS__)
    #define ELOG(format,...) LOG("ERR",ERR_LEVEL,format,##__VA_ARGS__)
}
#endif